The technology described herein relates to a method of and apparatus for compressing depth data in computer graphics processing systems. It also relates to the corresponding decompression method and apparatus.
As is known in the art, graphics processing is normally carried out by first dividing the output to be generated, such as a frame to be displayed, into a number of similar basic components (so-called “primitives”) to allow the graphics processing operations to be more easily carried out. These “primitives” are usually in the form of simple polygons, such as triangles.
The graphics primitives are usually generated by the applications program interface for the graphics processing system, using the graphics drawing instructions (requests) received from the application (e.g. game) that requires the graphics output.
Each primitive is at this stage usually defined by and represented as a set of vertices. Each vertex for a primitive has associated with it a set of data (such as position, colour, texture, and other attributes data) representing the vertex. This data is then used, e.g., when rasterising and rendering the vertex (the primitive(s) to which the vertex relates) in order to generate the desired output of the graphics processing system.
Once primitives and their vertices have been generated and defined, they can be processed by the graphics processing system, in order, e.g., to display the frame.
This process basically involves determining which sampling points of an array of sampling points covering the output area to be processed are covered by a primitive, and then determining the appearance each sampling point should have (e.g. in terms of its colour, etc.) to represent the primitive at that sampling point. These processes are commonly referred to as rasterising and rendering, respectively.
(In graphics literature, the term “rasterisation” is sometimes used to mean both primitive conversion to sample positions and rendering. However, herein “rasterisation” will be used to refer to converting primitive data to sampling point addresses only.)
The rasterising process determines the sample positions that should be used for a primitive (i.e. the (x, y) positions of the sampling points to be used to represent the primitive in the output, e.g. scene to be displayed). This is typically done using the positions of the vertices of a primitive.
The rendering process then derives the data, such as red, green and blue (RGB) colour values and an “Alpha” (transparency) value, necessary to represent the primitive at the sampling points (i.e. “shades” each sampling point). This can involve, as is known in the art, applying textures, blending sampling point data values, applying depth tests using depth data etc.
The data which is used to process or represent primitives at the sampling points may be temporarily stored in or retrieved from one or more buffers. In some cases, the buffered data may be written out to or read in from external memory. In order to reduce storage and bandwidth requirements on a graphics processing device when storing the buffered data in memory, it is known to try to store the buffered data in a compressed form. This is particularly useful for mobile and handheld devices that perform graphics processing, as such devices can be inherently limited in their storage and bandwidth capabilities. Normally some form of dedicated hardware is provided to perform the compression/decompression for each respective form of data that is to be compressed/decompressed (e.g. colour data).
Notwithstanding the known data compression/decompression arrangements, the Applicants believe that there remains scope for improved arrangements for compressing and decompressing depth data in computer graphics processing systems.
Like reference numerals are used for like components where appropriate in the drawings.